<?php

/**
 * This is the model class for table "Usuarios".
 *
 * The followings are the available columns in table 'Usuarios':
 * @property integer $idUsuario
 * @property string $Username
 * @property string $Clave
 * @property string $Correo
 * @property string $Nombre
 * @property string $Apellidos
 * @property string $Pais
 * @property string $Estado
 * @property string $Ciudad
 * @property string $Msn
 * @property string $Gtalk
 * @property string $Skype
 * @property string $Telefono
 * @property string $Movil
 * @property string $Perfil
 * @property string $Foto
 * @property string $CuentaConfig
 * @property string $FechaCreacion
 * @property string $FechaUltimaVisita
 * @property integer $Status
 */
class Usuarios extends CActiveRecord
{
	public $Correo_Confirmacion;
	public $Clave_Confirmacion;
	public $ClaveNueva;
	public $ClaveNuevaConfirmacion;
	public $Aceptar_Terminos_Politicas;
	
	/**
	 * Returns the static model of the specified AR class.
	 * @return Usuarios the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'Usuarios';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			
			//Reglas generales
			array('Msn, Gtalk, Skype', 'safe'),
		
			//Reglas de validación a la hora de registro
			array('Username, Clave, Correo, Nombre, Apellidos, Status', 'required', 'message'=>'Por favor ingresa un valor para el campo: {attribute}.', 'on'=>'registro'),
			array('Username, Clave', 'length', 'min'=>7, 'max'=>15, 'message'=>'El campo {attribute} debe estar entre 7 y 15 caracteres', 'on'=>'registro'),
			array('Correo', 'email', 'message'=>'Ingresa un correo electronico valido', 'on'=>'registro'),
			array('Username', 'match', 'pattern'=>'/^([a-zA-Z0-9_])+$/', 'on'=>'registro', 'message'=>'Tu usuario solo se puede componer de letras, numeros y guion bajo'), 
			array('Username, Correo', 'unique', 'on'=>'registro', 'message'=>'El {attribute} ya esta registrado'),
			
			
			//Reglas para subir foto
			array('Foto', 'file', 'types'=>'jpg, jpeg', 'wrongType'=>'Solo se pemiten imagenes en formato jpg','maxSize'=>1024 * 1024, 'tooLarge'=>'La Foto no puede ser mayor a 1MB', 'on'=>'actualizarFoto'),
			//Reglas al recuperar
			array('Correo', 'required', 'message'=>'Por favor ingresa el correo con el cual te registraste.', 'on'=>'recuperar'),
			array('Correo', 'exist', 'message'=>'El correo no existe, ingresa el correo con el cual te registraste.', 'on'=>'recuperar'),
			//Reglas de validación al actualizar
			array('Nombre, Apellidos, Status, Correo', 'required', 'message'=>'Por favor ingresa un valor para el campo: {attribute}.', 'on'=>'actualizar'),
                        array('Clave', 'length', 'min'=>7, 'max'=>15, 'message'=>'El campo {attribute} debe estar entre 7 y 15 caracteres', 'on'=>'actualizar'),
                        array('Correo', 'email', 'message'=>'Ingresa un correo electronico valido', 'on'=>'registro'),
			//Reglas de validación al actualizar password
			array('Clave', 'required', 'message'=>'Por favor ingresa tu clave actual', 'on'=>'actualizarClave'),
			//array('Clave', 'validarClave', 'message'=>'Por favor ingresa tu clave actual', 'on'=>'actualizarClave'),
			array('ClaveNueva, ClaveNuevaConfirmacion', 'required', 'on'=>'actualizarClave'),
			array('ClaveNuevaConfirmacion', 'compare', 'compareAttribute'=>'ClaveNueva', 'on'=>'actualizarClave', 'message'=>'Las claves no coinciden'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('idUsuario, Username, Clave, Correo, Nombre, Pais, Estado, Ciudad, Msn, Gtalk, Skype, Telefono, Movil, Perfil, Foto, CuentaConfig, FechaCreacion, FechaUltimaVisita, Status', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'idUsuario' => 'Id Usuario',
			'Username' => 'Usuario',
			'Clave' => 'Clave',
			'ClaveNueva' => 'Nueva Clave',
			'ClaveNuevaConfirmacion' => 'Confirmar nueva clave',
			'Correo' => 'Correo',
			'Nombre' => 'Nombre',
			'Apellidos' => 'Apellidos',
			'Pais' => 'Pais',
			'Estado' => 'Estado',
			'Ciudad' => 'Ciudad',
			'Msn' => 'Msn',
			'Gtalk' => 'Gtalk',
			'Skype' => 'Skype',
			'Telefono' => 'Telefono',
			'Movil' => 'Movil',
			'Perfil' => 'Perfil',
			'Foto' => 'Foto',
			'CuentaConfig' => 'Cuenta Config',
			'FechaCreacion' => 'Fecha Creacion',
			'FechaUltimaVisita' => 'Fecha Ultima Visita',
			'Status' => 'Status',
			'Aceptar_Terminos_Politicas' => 'Acepto los Terminos y Políticas de Uso',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('idUsuario',$this->idUsuario);
		$criteria->compare('Username',$this->Username,true);
		$criteria->compare('Clave',$this->Clave,true);
		$criteria->compare('Correo',$this->Correo,true);
		$criteria->compare('Nombre',$this->Nombre,true);
		$criteria->compare('Apellidos',$this->Apellidos,true);
		$criteria->compare('Pais',$this->Pais,true);
		$criteria->compare('Estado',$this->Estado,true);
		$criteria->compare('Ciudad',$this->Ciudad,true);
		$criteria->compare('Msn',$this->Msn,true);
		$criteria->compare('Gtalk',$this->Gtalk,true);
		$criteria->compare('Skype',$this->Skype,true);
		$criteria->compare('Telefono',$this->Telefono,true);
		$criteria->compare('Movil',$this->Movil,true);
		$criteria->compare('Perfil',$this->Perfil,true);
		$criteria->compare('Foto',$this->Foto,true);
		$criteria->compare('CuentaConfig',$this->CuentaConfig,true);
		$criteria->compare('FechaCreacion',$this->FechaCreacion,true);
		$criteria->compare('FechaUltimaVisita',$this->FechaUltimaVisita,true);
		$criteria->compare('Status',$this->Status);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
	
	/**
	 * 
	 * Acciones realizadas antes de guardar el registro
	 * 
	 */
	public function beforeSave(){
		if($this->isNewRecord){
			$this->Clave = md5($this->Clave);
			//$this->Status = 1;
			$this->FechaCreacion = date("Y-m-d H:i:s");
			$this->setAttribute('CodigoValidacion', md5(microtime().$this->Username));
		}else{
                        if($this->getScenario()=='actualizar'){
                            if($this->Clave==''){
                                unset($this->Clave);
                            }else{
                                $this->Clave = md5($this->Clave);
                            }
                        }
			$this->FechaUltimaVisita = date("Y-m-d H:i:s");
		}
		
		return parent::beforeSave();
	}
	
	public function afterSave()
	{
		if($this->isNewRecord){
			////Metemos al usuario a su rol
			$auth=Yii::app()->authManager;
			$auth->assign('Usuario',strtolower($this->Username));
			
			//Enviamos correo
			/*$correo = new Correo();
                        $correo->validarCuenta($this->Correo, $this->Nombre." ".$this->Apellidos, $this->CodigoValidacion);
                         * 
                         */
		}	
	}

}